package com.mazaiting.cryption.sm;

import com.mazaiting.cryption.sm.sm3.SM3Util;
import com.mazaiting.cryption.sm.sm4.SM4Util;

import java.util.Objects;

/**
 * 国密加解密工具类
 * 功能:
 * 1. SM2非对称加解密
 * 2. SM3验签
 * 3. SM4对称加解密
 *
 * @author mazaiting
 * @create_time 2022/4/4 09:26
 */
public class SMUtil {

    /**
     * 签名
     * @param data 数据
     * @return 签名数据
     */
    public static String sign(String data) {
        return SM3Util.sign(data);
    }

    /**
     * SM4加密
     *
     * @param key  密钥
     * @param data 待加密数据
     * @return 密文
     */
    public static String encrypt(String key, String data) {
        try {
            return SM4Util.encrypt(key, data);
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * SM4解密
     *
     * @param key  密钥
     * @param data 待解密数据
     * @return 明文
     */
    public static String decrypt(String key, String data) {
        try {
            return SM4Util.decrypt(key, data);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 验证签名
     *
     * @param srcData 源数据
     * @param sm3Data 签名数据
     * @return true 验证成功; false: 验证失败
     */
    private static boolean verify(String srcData, String sm3Data) {
        try {
            return Objects.equals(SM3Util.sign(srcData), sm3Data);
        } catch (Exception e) {
            return false;
        }
    }

}
